package MODEL;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.GregorianCalendar;
import java.util.ArrayList;
import oracle.jdbc.OracleTypes;

/**
 * Classe de mapeamento da entidade pessoa
 */
public class PessoaModel extends AbstractModel {
    private Integer                    cpf;
    private String                     nome;
    private GregorianCalendar          dataNascimento;
    private String                     rua;
    private String                     numero;
    private String                     cidade;
    private Integer                    cep;
    private Integer                    telefone;
    private Integer                    celular;
    private String                     tipoPessoa;
    private ArrayList<OcorrenciaModel> ocorrencias;
    private Integer                    pessoaExiste;
    private Integer                    espectadorExiste;
    private Integer                    ingressoExiste;
    private CallableStatement          chamada;

    public PessoaModel() {
        
    }

    public PessoaModel(Integer cpf) {
        this.cpf = cpf;
    }    
    
    public Integer getCpf() {
        return cpf;
    }

    public void setCpf(Integer cpf) {
        this.cpf = cpf;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public GregorianCalendar getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(GregorianCalendar dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    public String getRua() {
        return rua;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public Integer getCep() {
        return cep;
    }

    public void setCEP(Integer cep) {
        this.cep = cep;
    }

    public Integer getTelefone() {
        return telefone;
    }

    public void setTelefone(Integer telefone) {
        this.telefone = telefone;
    }

    public Integer getCelular() {
        return celular;
    }

    public void setCelular(Integer celular) {
        this.celular = celular;
    }

    public String getTipoPessoa() {
        return tipoPessoa;
    }

    public void setTipoPessoa(String tipoPessoa) {
        this.tipoPessoa = tipoPessoa;
    }

    public ArrayList<OcorrenciaModel> getOcorrencias() {
        return ocorrencias;
    }

    public void setOcorrencias(ArrayList<OcorrenciaModel> ocorrencias) {
        this.ocorrencias = ocorrencias;
    }

    public Integer pessoaExiste() {
        return pessoaExiste;
    }

    public void setPessoaExiste(Integer pessoaExiste) {
        this.pessoaExiste = pessoaExiste;
    }

    public Integer espectadorExiste() {
        return espectadorExiste;
    }

    public void setEspectadorExiste(Integer espectadorExiste) {
        this.espectadorExiste = espectadorExiste;
    }

    public Integer ingressoExiste() {
        return ingressoExiste;
    }

    public void setIngressoExiste(Integer ingressoExiste) {
        this.ingressoExiste = ingressoExiste;
    }
    
    public void verificaPessoaDB() {
        
    }
    
    /**
     * Método verificação de dados da pessoa no banco de dados
     * 
     * @param conexao
     * @param dataString
     * @throws java.sql.SQLException
     */     
    public void verificaPessoaDB(Connection conexao, String dataString) throws SQLException {        
        try {
            chamada = conexao.prepareCall("call F_VERIFICAR_PESSOA(?,?,?,?,?)");
            chamada.setInt(1, cpf);
            chamada.setString(2, dataString);
            chamada.registerOutParameter(3, OracleTypes.INTEGER);
            chamada.registerOutParameter(4, OracleTypes.INTEGER);
            chamada.registerOutParameter(5, OracleTypes.INTEGER);
            chamada.execute();
            pessoaExiste     = 0;
            espectadorExiste = 0;
            ingressoExiste   = 0;
            pessoaExiste     = (Integer) chamada.getInt(3);
            espectadorExiste = (Integer) chamada.getInt(4);
            ingressoExiste   = (Integer) chamada.getInt(5);
        } catch (SQLException e) {
            //System.out.println(e.getMessage());
        }
    }
    
    /**
     * Método cadastro da pessoa no banco de dados
     * 
     * @param conexao
     * @throws java.sql.SQLException
     */    
    public void cadastrarPessoaDB(Connection conexao) throws SQLException {
        try {
            chamada = conexao.prepareCall("call F_CADASTRAR_PESSOA(?,?,?,?,?,?,?,?,?,?)");
            chamada.setInt(1, cpf);
            chamada.setString(2, nome);
            chamada.setDate(3, calendarToDateSQL(dataNascimento));
            chamada.setString(4, rua);
            chamada.setString(5, numero);
            chamada.setString(6, cidade);
            chamada.setInt(7, cep);
            chamada.setInt(8, telefone);
            chamada.setInt(9, celular);
            chamada.setString(10, tipoPessoa);
            chamada.execute();
        } catch (SQLException e) {
            //System.out.println(e.getMessage());
        }
    }
    
    /**
     * Método cadastro da pessoa no banco de dados
     * 
     * @param conexao
     * @param cpf
     * @param nome
     * @param dataNascimento
     * @param rua
     * @param numero
     * @param cidade
     * @param cep
     * @param telefone
     * @param celular
     * @param tipoPessoa
     * @throws java.sql.SQLException
     */    
    public void cadastrarPessoaDB(
            Connection conexao,
            Integer cpf,
            String nome,
            GregorianCalendar dataNascimento,
            String rua,
            String numero,
            String cidade,
            Integer cep,
            Integer telefone,
            Integer celular,
            String tipoPessoa
            ) throws SQLException {
        this.cpf            = cpf;
        this.nome           = nome;
        this.dataNascimento = dataNascimento;
        this.rua            = rua;
        this.numero         = numero;
        this.cidade         = cidade;
        this.cep            = cep;
        this.telefone       = telefone;
        this.celular        = celular;
        this.tipoPessoa     = tipoPessoa;
        
        cadastrarPessoaDB(conexao); 
    }
    
    /**
     * Método verificação de dados da pessoa no banco de dados
     * 
     * @param conexao
     * @param dataString
     * @throws java.sql.SQLException
     */     
    public void verificaPessoaPerfilDB(Connection conexao, String dataString) throws SQLException {        
        chamada = conexao.prepareCall("call F_VERIFICAR_PESSOA_PERFIL(?,?,?)");
        chamada.setInt(1, cpf);
        chamada.setString(2, dataString);
        chamada.registerOutParameter(3, OracleTypes.INTEGER);
        chamada.execute();
        pessoaExiste = 0;
        pessoaExiste = (Integer) chamada.getInt(3);
    }    
    
}
